using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Justificativa;
using System;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Calendario;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.Communication
{

    /// <summary>
    /// Modelo da entidade de Calendario Da Ordem
    /// </summary>
    public class Operador : BaseCommunication 
    { 

        public Operador(SessionInformation sessionInformation)
			: base(sessionInformation) 
		{
		} 

		/// <summary>
        /// ConsultarOperadores
		/// </summary>
		/// <param name="request"></param>
		/// <returns></returns>
        public ModelCollection<Model.Operador> ConsultarOperadores(Model.Parameter.FiltroOperador model)
        {
            ModelCollection<Model.Operador> retorno = null;
            IOperador servico = null;
            try
            {
                using (ServiceInstance<IOperador> service = new ServiceInstance<IOperador>())
                {
                    servico = service.TryGetInstance(this.Session);

                    Communication.Bovespa.ManutencaoOrdens.Operador.FiltroOperadorRequest request 
                        = new Translator.ModelToDataContract.Operador().ToFiltroOperadorRequest(model);

                    retorno = new Translator.DataContractToModel.Operador().ToOperador(
                        servico.ConsultarOperadores(request));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return retorno;
		}

		/// <summary>
        /// ConsultarSubordinados
		/// </summary>
		/// <param name="request"></param>
		/// <returns></returns>
        public ModelCollection<Model.Operador> ConsultarSubordinados(Model.Parameter.FiltroCodigoOperador model)
        {
            ModelCollection<Model.Operador> retorno = null;
            IOperador servico = null;
            try
            {
                using (ServiceInstance<IOperador> service = new ServiceInstance<IOperador>())
                {
                    servico = service.TryGetInstance(this.Session);

                    Communication.Bovespa.ManutencaoOrdens.Operador.FiltroCodigoOperadorRequest request
                        = new Translator.ModelToDataContract.Operador().ToFiltroCodigoOperadorRequest(model);

                    retorno = new Translator.DataContractToModel.Operador().ToOperador(
                        servico.ConsultarSubordinados(request));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return retorno;
		}

		/// <summary>
        /// ObterPreferencias
		/// </summary>
		/// <param name="request"></param>
		/// <returns></returns>
		public Model.Preferencias ObterPreferencias(Int32 model)
        {
            Model.Preferencias retorno = null;
            IOperador servico = null;
            try
            {
                using (ServiceInstance<IOperador> service = new ServiceInstance<IOperador>())
                {
                    servico = service.TryGetInstance(this.Session);

                    Communication.Bovespa.ManutencaoOrdens.Operador.CodigoOperadorRequest request
                        = new CodigoOperadorRequest() { Valor = model };

                    retorno = new Translator.DataContractToModel.Operador().ToPreferencias(
                        servico.ObterPreferencias(request));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return retorno;
		}

	}

}